<?php
	global $rangetype;
	$rangetype = array("taobao");

	/**
	 * 参数处理及排序 
	* @params array $paradata  传入的参数数组
	* @params boolean $issort=true	 排序,默认为true，非true为不做排序，排序按键值字母升序顺序排列（a,b,c） 
	* @params boolean $para_range=""	参数排列规则是否按url格式，默认为空，如果在配置数组中匹配到值则使用特殊排列方式  
	* @return string 拼接后的参数字符串
	*/ 	
	function parasort($paradata ,$para_range="", $issort=true , $encode="UTF-8") {
			global $rangetype;
			$parastr='';
			if($issort){	//do sort if issort=1
				ksort($paradata);}
			//对不同平台参数的拼接方式兼容
			if(!empty($para_range)){			//http url style if httpquery=1
				if(in_array($para_range,$rangetype)){
					foreach ($paradata as $k => $v) {
						$parastr .= "$k$v";
					}
				}
			}
			else
				$parastr = urldecode(mb_convert_encoding(http_build_query($paradata),$encode));
			return $parastr;
		}
		/**
	 	 * md5签名算法 
		 * @params array $para  传入的参数数组
		 * @params boolean $issort	 排序,默认为true，非true为不做排序，排序按键值字母升序顺序排列（a,b,c） 
		 * @params boolean $para_range	是否按url格式，排序默认为空  
		 * @return string 拼接后的参数字符串
		 */ 
	function sig_md5($para ,$secret="", $para_range="", $issort=true){
			if(is_array($para))
			{
				$para = parasort($para, $para_range, $issort);
				if(!empty($secret))
					$para = $secret.$para.$secret;
				$para = strtoupper(md5($para));
				return $para;
			}
			else
				return false;
		}
		/**
	 	 * hash_hmac签名算法 可附加 base64encode
		 * @params array $para  传入的参数数组
		 * @params String $key	加密值
		 * @params boolean $base64	 是否使用base64encode,默认为false，设定为true时生效 
		 * @params boolean $issort	 排序,默认为true，非true为不做排序，排序按键值字母升序顺序排列（a,b,c）
		 * @params boolean $httpquery	是否按url格式，排序默认为true，非true为字符串直接拼接
		 * @params String $algo	 hash的加密善法,默认为sha256，可指定其他 algos算法
		 * @return string 拼接后的参数字符串
		 */ 
	function sig_hash_hmac($para ,$key ,$base64=false ,$issort=true ,$httpquery=true ,$algo="sha256"){
		if(is_array($para))
		{
			$allow_algo = hash_algos();
			$algo = in_array($algo, $allow_algo)?$algo:"sha256";
			$para = parasort($para ,$issort ,$httpquery);

			$para = hash_hmac($algo, $para, $key);
			if($base64 === true)
				$para = base64_encode($para);

			return $para;
		}
		else
			return false;
	}

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/***
* 人人网签名算法 ( V=1.0 )
* @params array $data 参数数组
* @params string $secret 人人网秘钥
* @return string 签名字符串
*/
function sig_rernen( $data, $secret  ) {
$codestr = '';
ksort( $data );
foreach ( $data as $k => $v) {
$codestr .= "$k=$v";
}
return strtoupper( md5($codestr.$secret) );
} 

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------